
void main(List<String> arguments) {
  //dart 数组与list融合
  //数组，长度限制，类型限制
  // test1();
  // test2();
  test3();
}
/// 数组，list
void test1() {
  //JAVA 使用构造创建
  // var list = new List();
  var list = [];
  //创建一个int类型的list
  List intlist = [1, 2, 3];

  list[2] = 10;
  print(list);

  // 创建一个常量List， 不可以改变的List
  List constList = const[10, 7, 23];
  //Dart就可以直接打印list包含list的元素，java中直接打印list结果是地址值。
  print(constList); // [0, 1, 2, 3, 4, 5, 6]

}
// list常规操作
void test2(){
  //  在数组中可以存放多个不同类型的对象
  var list = [1, 2, 3, 'Flutter', true];
  print(list);      // 输出的结果：[1, 2, 3, Flutter, true]

  // 修改数组下标为2 的值
  list[2] = 'Dart'; // 输出的结果：[1, 2, Dart, Flutter, true]
  list.add('aaa');
  // 从下标0开始，下标2结束（不包括2），修改之间的值为字符a
  list.fillRange(0, 2, 'a'); // 输出的结果：[a, a, Dart, Flutter, true]

  // 获取数组的长度
  print(list.length);   // 输出的结果：5
  print(list);
  // 向数组中添加元素
  list.add("value"); // [a, a, Dart, Flutter, true, value]
  var addList=['8','9'];
  list.addAll(addList);//[a, a, Dart, Flutter, true, value，8，9]

  // 向数组中的指定位置添加元素
  list.insert(1, 'element');  // [a, element, a, Dart, Flutter, true, value]
  // 向数组中指定位置加入一组元素
  list.insertAll(3, ['1','2','3','4']);// [a, element, a, 1, 2, 3, 4, Dart, Flutter, true, value]

  // 移除数组中的元素
  list.remove("value");//[a, element, a, 1, 2, 3, 4, Dart, Flutter, true]
  // 移除数组中指定的元素
  list.removeAt(1);// [a, a, 1, 2, 3, 4, Dart, Flutter, true]

  // 判断数组中是否有某个元素
  print(list.indexOf("element"));   // 输出结果：-1

  // 可以使用 sort() 函数来排序, 但是由于我们使用定义的数组类型不一样，就不能使用
  var intlist = [1, 2, 5, 6 ,3];
  // 根据语法提示： List.sort([(int, int) → int compare]) → void
  //JAVA你想要自定义排序，需要自己去写一个接口，然后利用Collectionis.sort
  //dart继承到了list里面，同时开出来可以自定义规则
  intlist.sort( (a, b) =>  b.compareTo(a) );// [1, 2, 3, 5, 6]



  //数组翻转
  var newList1=list.reversed.toList();// [true, Flutter, Dart, 4, 3, 2, 1, a, a]
  var bools=list.isEmpty;//判断集合是否为空
  var bools2=list.isNotEmpty;//判断集合是否不为空
  print("newList1：$newList1");
  var str=list.join('***');//集合转字符串 可以用任意字符拼接
  // a***a***1***2***3***4***Dart***Flutter***true
  var newList2=str.split('***');//字符串转集合
  // [a, a, 1, 2, 3, 4, Dart, Flutter, true]


  list = [1,2,3,4,5];
  //两种遍历方式
  print("===============forEach==================");
  list.forEach((element) {
    print(element);
  });
  print("===============for in==================");
  for (var item in list) {
    print(item);
  }
  //常规仿照JAVA方案
  print("===============for==================");
  for (var i=0;i<list.length;i++) {
    print(list[i]);
  }
}

void test3() {
  //声明
  // var setName = <dataType>{}
  // Set<dataType> setName ={}

  Set<String> set1 = {"1","2","3","4","5"};
  Set<String> set2 = {"1","2","3"};




  //差集
  print(set1.difference(set2)); // {4, 5}

  //交集
  print(set1.intersection(set2)); // {1, 2, 3}

  //合并
  print(set1.union(set2)); // {1, 2, 3, 4, 5, 6}
  //保留删除
  set1.retainAll(set2);
  print(set1); // {1, 2, 3, 4, 5, 6}
}